■文章編2      ┏━━━━━━━━━━━━━━━━━━━━━━━━┓      ┃ ┃      ┃ I/Oのお話 ┃      ┃ ┃      ┗━━━━━━━━━━━━━━━━━━━━━━━━┛ ■どこまでが・・・・ ギリシア神話のスフィンクス伝説では,旅人に謎をかけ,答えられないと殺 してしまうという人面獣身の怪物を,オイディプスという英雄が退治したとさ れています。 その謎というのは,「朝に4つ足,昼に2本足,夜には3つ足で歩く生き物 は何か」,というものでした。みなさんはこの謎の答えをよくご存じでしょう。 そう,正解は「人間」です。赤ん坊のときは4つ足でハイハイし,成年になる と2本足で歩き,年老いると杖をついてあたかも3つ足で歩くようになる,と いうわけですね。 いきなりコンピュータとはあまり関係のなさそうな話から始めてしまいまし たが,もう少しお付き合いください。 このスフィンクスの謎と答えに対しては,いろいろクレームを付けることも 可能でしょう。ここでは,「杖」がはたして人間という生き物の足かどうかと いうことを気にしてみます。・・・・もちろん,生物学的には,杖は明らかにその お年寄りの肉体の一部ではありません。それと同様,今,このページを読んで おられるみなさんが身に着けている洋服や靴は,みなさん(=人間)の肉体の 一部ではありません。しかし,もしもあなたが上着も下着も身に着けずに街へ 出かけたとしたら,どうでしょう? あなたはもはや「人間扱い」してはもら えないかもしれません。すると・・・・それなくしては道も歩けない,洋服や靴, あるいは杖などといったものは実は「人間」の一部なのでしょうか? う〜ん ・・・・。 さて,コンピュータのお話です。ここに1台のコンピュータがあるとき,ど こまでがそのコンピュータ本体だと思いますか? たとえば,キーボード。キーボードがなくても,マウスなりパッドがあれば TOWNSではかなりいろんなことができそうです。ディスプレイは? ない とほとんどのソフトはお話になりませんが,たとえばオートスタートで計算を 始めて結果をディスクに出力するソフトなら,ディスプレイがなくてもTOW NSはコンピュータとしての面目を保てそうです。フロッピィディスク・・・・昔 はフロッピィディスクドライブの付いていないパソコンが少なくありませんで した。・・・・どうやら,ここで今例にあげたキーボードやディスプレイやフロッ ピィディスクといったあたりは,ないととっても不便だけれど,「コンピュー タ本体」には含まれないようですね。 それでは,コンピュータ本体,正確にいうと「コンピュータ本体の内部」と は,どこまでを指していうのでしょうか。実は,コンピュータの内部とは, 「CPUプラスCPUと直接バスでつながっているメモリまで」がそうだ,と いう説が一般的です。 CPUについては,1つ前の項目で扱いました。また,メモリというのも, 情報の読み書きが自由にできるが,電源を切ると内容が消えてしまう「RAM」 と,情報の読み出ししかできない代わりに,電源が切れても内容が保存される 「ROM」なるものがあることはご存じの方が多いと思います。また「バス」 というのは,2進数のデータを受け渡しするためのコンピュータ内部の信号線 のことを示します。 ■Input/Output さて,「コンピュータの内部とはCPUプラスCPUと直接バスでつながっ ているメモリまで」・・・・なるほど,ここまではいいとしましょう。コンピュー タの基本的な働き,たとえばCPUがメモリに格納されている命令を実行し, その結果をメモリに返すところなどを想像すれば,文句はありません。しかし ・・・・。当たり前のことですけど,それなら,その命令はいったいどこから与え られ,また結果はどこへ出ていくのでしょう? ここで,「I/O」(アイオーと読む)という言葉が登場します。I/Oとは, Input(入力)とOutput (出力)の頭文字を取った略語で,コンピュータの 外部にある情報を内部のCPUやメモリに伝えたり,あるいは逆にCPUやメ モリの情報を外部に伝えたりすること,ものを指しているのです。そして,こ の場合,I/Oという言葉には,「I/O機器」という意味合いと「I/Oポー ト」という意味合いの2つが含まれます。 だんだん難しくなってきました? 大丈夫,自慢じゃないですけど,ハード に弱い僕にもなんとか理解できたことなんですから。 ■I/O機器って? I/O機器とは,コンピュータの外部からの情報をCPUに理解できる形に して内部に渡したり,逆にコンピュータ内部の情報を人間に理解できる形に直 してくれる周辺機器で,「入出力装置」ともいいます。先ほど触れた,キーボ ードやディスプレイやフロッピィディスクドライブは,このI/O機器の代表 的な例といっていいでしょう。 たとえば,キーボードで「B」という文字を押した場合,人間にとっては 「B」でよくても,CPUには「B」というデータは通用しません(なにしろ, 2進数しか理解できないカタブツですからね)。そのため,キーボードおよび 関連のICは,「B」というキーが押されたところで,その文字に対応したコ ード(ASCIIコード)をCPUに送るのです。このようなデータの入力機 器には,キーボードのほか,マウスやパッド,ジョイスティックなどがありま す。逆の例が,ディスプレイやプリンタ,プロッタ,あるいはFM音源,PC M音源などの出力装置ですね。フロッピィディスクドライブやMIDI機器の ように,データの入力出力双方向を受け持つ機器も,もちろんあります。CD -ROMドライブはデータの読み出し専用ですね。 ■I/Oポートとは? 各種のI/O機器がコンピュータの外部に準備され,そのおかげで充実した コンピュータライフが送れるのだということはおわかりいただけたと思います。 CPUとメモリだけでもコンピュータはコンピュータの働き(計算など)をし ないわけではないのですが,それだけではまるで無人島で落雷で木が倒れたよ うなものです。 さて,ここで,ちょっとした問題が起こってきます。我らがCPU君がI/ O機器とデータをやりとりするとき,彼はいったいどうやってそのデータをや りとりしているのでしょう? データのやりとり自体は最初のほうで述べたバ ス(信号線)を使って行います。しかし,もしもキーボードからの信号が無制 限にCPUに流れ込んできたら,CPUがほかの働き(メモリとのデータのや りとりなど)をしているとき,データがぶつかって大混乱が起こってしまいそ うです。逆に,フロッピィディスクにデータを出力しようとするとき,フロッ ピィディスクドライブなどとは比較にならないほど頭の回転の速いCPU君が 次から次へとデータを吐き出したなら,フロッピィディスクドライブは書き込 みが間に合わず,データに溺れてしまうかもしれません・・・・。 こういった,コンピュータの内部と外部,すなわちCPUやメモリと,外の I/O機器との間のデータのやりとりの情報窓口として働くのが「I/Oポート」 という機構です。 このI/Oポート,多くのパソコンでは,一般に「I/O空間」とよばれる特 定の領域を読んだり書いたりすることによって機能します。これは,アセンブ ラやC言語でプログラムを作った経験がないとちょっと感覚的にわかりにくい ことなんですが,たとえば次のような感じでしょうか。 「よ〜し,プリンタに文字を出力するぞ。えっと,プリンタ関係のI/Oポー トは○×番地だから,その○×番地に1バイト書き込めばいいんだね。書き書 きっと」 「はいは〜い,こちらプリンタ関係のI/Oポートで〜す。何か御用ですか?」 「用があるから呼んだのっ。これからこの文字,プリンタで打ち出してね」 「はぁい,それじゃ1文字,っと・・・・」 と,まぁ,こんな具合でしょうか。 「特定のアドレスを読み書きする」というのは,特定の番地にあるI/Oポー トのドアのノッカーを押したり引いたりする,とでも考えればいいんじゃない かと思います。 ■I/O港の向こうとこちら 以上のようなハードウェア回りの話は,最近ますます「知らなくてもなんと かなる」領域に入ろうとしてきたような気がします。第一,コンピュータの内 部,外部とかいっても,ディスプレイ一体型のTOWNSを手にした方にとっ て「そのディスプレイはコンピュータの外部」とか「CD-ROMも外部」と か言っても,ほとんど意味がありません。ディスプレイやCD-ROM,FM 音源やPCM音源がそろっているからこそ,TOWNSはTOWNSなのです からね。 要するに,I/Oポートなどの知識は,がしがし高速プログラムを作ろうと するとき初めて必要になるものなのです。接続されるI/O機器やI/Oポート のアドレス・使い方などは,コンピュータの機種によって異なるため,それを 直接操るようなプログラム(よく「ハードを直にいじる」などといいます)は, 当然のことながら機種依存性が高く,ほかのマシンへの移植は困難を極めます。 そういったプログラムは,高速であったり,高機能であったりすることもあり ますが,同じOS上のソフトなのに特定の機種でしか動作しなかったり,マシ ンのバージョンアップに伴って動かなくなったりで,「お行儀が悪い」とみな されることもまた事実です。 ここで,「あれ? I/Oポートを直接読み書きするのがお行儀が悪いのだ ったら,お行儀がいいプログラムってどうやって周辺機器を操作しているの?」 と疑問に思った方。あなたは鋭い。「シャーロック・ホームズの探偵講座」な どすらすら解けた方に違いありません。 さて,一般のプログラムが,どうやってI/O機器を操作しているかですが, そのためにマシンに準備されているのが「BIOS(Basic Input Output System )」(バイオスと読む)というものです。これは,I/O機器を操作 するための基本的なルーチンをまとめたもので,直接I/Oポートを操作する よりは遅いかもしれないが,使い方が簡単で,マシンがバージョッアップして もある程度互換性が保てる,というものです。エプソンがPC-9801シリーズ の互換機を出したとき,このBIOSの著作権をめぐって争われたことは記憶 に新しいですね。